酷狗音乐网站前端JS的逆向过程 您所在的位置:网站首页 酷狗音乐 网页 酷狗音乐网站前端JS的逆向过程

酷狗音乐网站前端JS的逆向过程

2022-10-09 04:34| 来源: 网络整理| 查看: 265

事件背景

前不久我写了一个按歌手爬取酷狗音乐所有歌曲的爬虫,然后在昨天2019年5月10日使用的时候出现了错误,排查问题后发现是获取歌曲相关信息的那个接口做了修改,导致我原有的爬虫失效。在测试后发现,在原有的基础上需要携带Cookie里面的kg_mid参数才能正常获取,然后我去浏览器里面查看页面刷新出来的请求,发现kg_mid参数是浏览器生成的而不是服务器返回的,所以就开始了逆向前端JS的过程。

逆向过程

首先我查看了所有的请求,然后筛选后只保留了获取JS文件的请求,确定具体是哪个文件最死板的方法是一个个打开然后去查有没有kg_mid这个参数的相关生成方法,但是这里我们根据JS文件的名字推测出应该是我标记的这个kguser_min.js文件,因为Cookie就是相当于用户的身份,所以根据user能推测出是这个文件,事实上也确实是在这个JS文件里面,所以有时候合理的推测是可以大大减小我们的工作量的。 在这里插入图片描述

将这个JS文件下载下来用编辑工具打开,这里我用的是Notepad打开的 在这里插入图片描述

但是打开后发现格式并没有对其,代码挨在一起阅读比较困难,所以我们把里面的JS代码剪切出来,找一个JS格式化的工具把它格式化后在粘贴回去。

在线工具网站:JS/HTML格式化

格式化后的效果图 在这里插入图片描述

接下来是重点了,文件内按CTRL+F查找kg_mid,定位到的位置代码作用是设置KgMid的name属性的值为kg_mid,所以下一步我们要查的是KgMid 在这里插入图片描述

查到的第一个位置,代码作用大概是读取Cookie里面的kg_mid对应的值,但是读取不是写入,跟我们的目的不符,虽然看这些代码能让我们了解酷狗的运作过程 在这里插入图片描述

因为这个匹配的位置有点多,所以我就不一一叙述了,直接找到我们发现将kg_mid写入Cookie的代码

定位到位置,判断依据是KgUser.Cookie.write方法,这个Cookie.write方法是用来写入Cookie的。这里的相关代码作用大概是读取Cookie里面的kg_mid对应的值,判断是否有值,如果没有,则将kg_mid写入Cookie 在这里插入图片描述

而我们的注意力就要放到下面这两句代码上面,我们来分析它们

var n = KgUser.Guid(); KgUser.Cookie.write(KgUser.KgMid.name, KgUser.Md5(n), KgUser.KgMid.days * 86400, "/",KgUser.GetDomain());

Guid()方法很明显是按照一定规则返回一个生成的参数,并传给下面的Md5()方法

然后再看Cookie.write这个方法,这里面重要的两个参数是name、value,对应的就是KgUser.KgMid.name和KgUser.Md5(n) 在这里插入图片描述

所以我们实际只需要模拟函数Guid()和Md5(),首先找到Guid()的位置 在这里插入图片描述

利用工具调试这段代码后发现,S4()作用是生成一个四个随机字符拼接成的字符串,这个字符要求属于a-z 0-9的范围 在这里插入图片描述

然后Python模拟这个方法可以用下述代码代替

import random #随机生成4位随机的字符列表 范围为a-z 0-9 n=random.sample('abcdefghijklmnopqrstuvwxyz0123456789',4) #将列表元素拼接为字符串 n=''.join(n)

然后找到Md5()的位置 在这里插入图片描述

这个部分代码比较多,所以我本来第一想法是交给JS引擎处理,相当于Python调用JS,然后将返回结果传给爬虫,但是最后发现这一部分代码其实就是MD5加密算法的JS实现,而刚开始我以为是酷狗特有的(在MD5通用加密算法的基础上修改具体参数)

这部分如果用JS引擎处理的话需要用到一个Python的第三方库execjs,相关使用可参看: Python如何执行JS代码

但是这里我着重讲的是用另一种方法调用Python的hashlib这个第三方库,用它来实现Md5加密

hashlib库的安装,打开CMD控制台,输入:pip install hashlib来安装

然后完整的生成kg_mid参数的PYTHON代码如下:

# -*- coding: utf-8 -*- """ @author: CoderYYN @Email: [email protected]

逆向n酷狗js加密方法 MD5 加密参数 Cookie里面的kg_mid “”" import hashlib import random

#创建md5对象 md5= hashlib.md5() #随机生成4位随机的字符列表 范围为a-z 0-9 n=random.sample('abcdefghijklmnopqrstuvwxyz0123456789',4) #将列表元素拼接为字符串 n=''.join(n) #将字符串编码后更新到md5对象里面 md5.update(n.encode()) #调用hexdigest获取加密后的返回值 result=md5.hexdigest() print(result) ``` 运行结果 在这里插入图片描述 总结

JS的破解其实就是去JS里面找到反爬虫设置的手段,只要读懂了JS的意思,并且能灵活运用Python实现,就能达到以假乱真的地步。 其实对于有基础的同学来说,JS很好读懂,对于没见过的函数和方法,不用迷茫,网上查找相关资料就好了,毕竟这些都是API,不需要背下来。

相关文章 Windows10下安装Anaconda3(64位)详细过程强力推荐的文本编辑器 NotepadPython如何执行JS代码

我的个人博客网站是:www.coderyyn.cn 上面会不定期分享有关爬虫、算法、环境搭建以及有趣的帖子 欢迎大家一起交流学习

转载请注明



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有